/**
 * 设备类型
 */
export type DeviceType = 'dlna' | 'airplay';

/**
 * 设备信息
 */
export interface Device {
  /**
   * 设备ID
   */
  id: string;
  /**
   * 设备ID (兼容旧版API)
   */
  deviceId?: string;
  /**
   * 设备名称
   */
  name: string;
  /**
   * 设备IP地址
   */
  ipAddress: string;
  /**
   * 设备类型
   */
  type: DeviceType;
  /**
   * 设备型号
   */
  model?: string;
  /**
   * 设备型号 (兼容旧版API)
   */
  modelName?: string;
  /**
   * 设备制造商
   */
  manufacturer?: string;
}

/**
 * 播放状态
 */
export interface PlaybackStatus {
  /**
   * 是否正在播放
   */
  isPlaying: boolean;
  /**
   * 当前播放位置（秒）
   */
  position: number;
  /**
   * 视频总时长（秒）
   */
  duration: number;
  /**
   * 是否已缓冲
   */
  isBuffering: boolean;
  /**
   * 是否已结束
   */
  isCompleted: boolean;
  /**
   * 是否出错
   */
  isError: boolean;
  /**
   * 错误信息
   */
  errorMessage?: string;
}

/**
 * 错误事件数据
 */
export interface ErrorEventData {
  /**
   * 错误代码
   */
  code: string;
  /**
   * 错误消息
   */
  message: string;
  /**
   * 错误详情
   */
  details?: any;
}

/**
 * 连接状态事件数据
 */
export interface ConnectionStatusEventData {
  /**
   * 设备ID
   */
  deviceId: string;
  /**
   * 是否已连接
   */
  connected: boolean;
}

/**
 * 权限检查结果
 */
export interface PermissionCheckResult {
  /**
   * 是否拥有所有必要权限
   */
  hasPermissions: boolean;
  /**
   * 缺少的权限列表
   */
  missingPermissions?: string[];
  /**
   * 错误信息
   */
  errorMessage?: string;
}

/**
 * 向后兼容的设备类型
 */
export interface DlnaDevice extends Device {
  deviceId?: string; // 兼容旧版API，映射到id
  deviceName?: string; // 兼容旧版API，映射到name
  deviceAddress?: string; // 兼容旧版API，映射到ipAddress
}

/**
 * 权限请求选项
 */
export interface PermissionRequestOptions {
  /**
   * 是否显示请求理由
   */
  showRationale?: boolean;
  /**
   * 权限请求标题
   */
  title?: string;
  /**
   * 权限请求消息
   */
  message?: string;
  /**
   * 确认按钮文本
   */
  buttonPositive?: string;
  /**
   * 取消按钮文本
   */
  buttonNegative?: string;
  /**
   * 权限被拒绝时的回调
   */
  onDenied?: () => void;
  /**
   * 是否强制请求权限，即使最近已请求过
   * 默认为false，避免频繁请求打扰用户
   */
  forceRequest?: boolean;
  /**
   * 当权限被永久拒绝时的回调
   */
  onPermanentlyDenied?: () => void;
}

/**
 * 权限信息返回类型
 */
export interface PermissionInfoResult {
  /**
   * 权限类型
   */
  type: string;
  /**
   * 权限名称
   */
  name: string;
  /**
   * 权限说明
   */
  description: string;
  /**
   * 请求理由
   */
  rationale: string;
  /**
   * 权限是否是必需的
   */
  isRequired: boolean;
  /**
   * 当前权限状态
   */
  status?: string;
}

/**
 * 权限永久拒绝状态
 */
export interface PermanentlyDeniedPermissions {
  /**
   * 是否有权限被永久拒绝
   */
  hasPermanentlyDeniedPermissions: boolean;
  /**
   * 被永久拒绝的权限列表
   */
  permanentlyDeniedPermissions?: string[];
} 